package eventos.abrir;

import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;

import controlador.ControladorIdentificadores;
import controlador.IControladorAtributo;
import controlador.IControladorEntidadExistente;
import controlador.IObjDelModConRefExternaEntidad;
import controlador.MediadorVentanaAgregarEntidadExterna;
import eventos.EventoQuitarAtributo;
import eventos.EventoQuitarEntidadExterna;
import eventos.EventoQuitarIdentificador;
import eventos.aceptar.EventoAceptarEntidadNueva;

import vista.ventanas.VentanaEntidad;


public class EventoAbrirVentanaEntidadNueva extends MouseAdapter 
{
	private JFrame ventanaPadre;
	private	IObjDelModConRefExternaEntidad controlador;
	private IControladorAtributo controladorAtributo;
	private IControladorEntidadExistente controladorEntidadExistente;
	
	public EventoAbrirVentanaEntidadNueva(JFrame ventanaPadre, IObjDelModConRefExternaEntidad controlador, IControladorAtributo ctrlAtibuto, IControladorEntidadExistente ctrlEntExitentes) 
	{
		super();
		this.ventanaPadre = ventanaPadre;
		
		//controlador: IControladorEntidadNueva
		this.controlador = controlador;
		this.controladorAtributo = ctrlAtibuto;
		this.controladorEntidadExistente = ctrlEntExitentes;
	}

	public void mouseClicked(MouseEvent e)
	{
		VentanaEntidad ventana = new VentanaEntidad(this.ventanaPadre, this.controlador.getProyectoActual().getTipoDeEntidades());

		EventoAceptarEntidadNueva eventoAceptar = new EventoAceptarEntidadNueva(ventana, controlador);
		ventana.escucharEventosBotonAceptar(eventoAceptar);
		
		agregarEventosAVentana(ventana);
		
		ventana.setVisible(true);
	}

	protected void agregarEventosAVentana(VentanaEntidad ventana)
	{
		EventoAbrirVentanaAtributo eventoAbrirVentanaAtributo = new EventoAbrirVentanaAtributo(ventana, controladorAtributo);
		ventana.escucharEventoNuevoAtributo(eventoAbrirVentanaAtributo);

		EventoEditarAtributo eventoEditarAtributo = new EventoEditarAtributo(ventana, controladorAtributo);
		ventana.escucharEventoEditarAtributo(eventoEditarAtributo);
		
		EventoQuitarAtributo eventoQuitarAtributo = new EventoQuitarAtributo(ventana);
		ventana.escucharEventoEliminarAtributo(eventoQuitarAtributo);
		
		MediadorVentanaAgregarEntidadExterna ctrlEntidadExistente = new MediadorVentanaAgregarEntidadExterna(ventana, controladorEntidadExistente);

		EventoAgregarEntidadExternaLogica eventoAgregarReferenciaExterna = new EventoAgregarEntidadExternaLogica(ventana, ctrlEntidadExistente);
		ventana.escucharEventoAgregarEntidad(eventoAgregarReferenciaExterna);

		EventoQuitarEntidadExterna eventoQuitarEntExterna = new EventoQuitarEntidadExterna(ventana);
		ventana.escucharEventoQuitarEntidad(eventoQuitarEntExterna);	
		
		ControladorIdentificadores ctrlId = new ControladorIdentificadores(ventana);
		
		EventoAgregarIdentificador eventoAbrirVentanaIdentificador = new EventoAgregarIdentificador(ventana, ctrlId);
		ventana.escucharEventoAgregarIdentificador(eventoAbrirVentanaIdentificador);
		
		EventoQuitarIdentificador eventoQuitarIdentificador = new EventoQuitarIdentificador(ventana);
		ventana.escucharEventoQuitarIdentificador(eventoQuitarIdentificador);
	}
	
	protected IObjDelModConRefExternaEntidad getControlador(){
		return this.controlador;
	}
	
	protected JFrame getVentanaPadre(){
		return this.ventanaPadre;
	}

}